package cn.good.yan.controller.t4;

import cn.good.yan.service.t4.GeoServiceImpl;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import org.springframework.data.geo.*;


/**
 * Geo 地理空间  - 演示
 *
 * @author shengren.yan
 * @create 2023-11-21
 */
@RestController
@RequestMapping("/t4")
@Slf4j
public class GeoController {

    @Autowired
    private GeoServiceImpl geoService;

    @ApiOperation("添加经纬度坐标")
    @GetMapping("/add")
    public String geoAdd() {
        return geoService.geoAdd();
    }

    // 访问 http://xxxxx/t4/get?member=北京站  返回 Point，包含了经纬度坐标
    @ApiOperation("获取经纬度坐标")
    @GetMapping("/get")
    public Point position(String member){
        return geoService.position(member);
    }

    // 访问 http://xxxxx/t4/getHash?member=北京站  返回 hash
    @ApiOperation("获取经纬度生成的base32编码值geohash")
    @GetMapping("/getHash")
    public String hash(String member){
        return geoService.hash(member);
    }

    // 访问 http://xxxxx/t4/getJL?m1=北京站&m2=故宫  返回 单位是千米
    @ApiOperation("获取两个位置之间的距离")
    @GetMapping("/getJL")
    public double distance(String m1, String m2){
        Distance distance = geoService.distance(m1, m2);
        return distance.getValue();
    }

    // 访问 http://xxxxx/t4/getFJ 返回 单位是千米
    @ApiOperation("通过经纬度查找 附近的有什么")
    @GetMapping("/getFJ")
    public GeoResults radiusByxy(){
        return geoService.radiusByxy();
    }

    // 访问 http://xxxxx/t4/getGG 返回 单位是千米，查询 故宫附件有什么
    @ApiOperation("根据某个位置，显示附近有哪些，商家店铺，取10条")
    @GetMapping("/getGG")
    public GeoResults radiusMember(){
        return geoService.radiusMember();
    }


}
